/**
 * 流程定义管理
 */
layui.define(['index', 'flying'], function (exports) {  //先加载index模块，里面配置了全局的入口
  const $ = layui.$
      ,admin = layui.admin
      ,flying = layui.flying
      ,form = layui.form
      ,table = layui.table
      ,layer = layui.layer
      ,util = layui.util
      ,dropdown = layui.dropdown;

  flying.table({
    elem: '#LAY-definition-table',
    id: 'LAY-definition-table',
    url: '/flow/definition/page', //数据接口
    cols: [
      {type: 'numbers', fixed: 'left', title: '序号'}
      , {field: 'id', title: '流程定义ID', minWidth: 160}
      , {field: 'category', title: '类别', minWidth: 80, hide: true}
      , {field: 'name', title: '名称', minWidth: 150}
      , {field: 'description', title: '描述', minWidth: 150}
      , {field: 'resource', title: '资源文件名称', templet: '#xml-res', minWidth: 90}
      , {field: 'version', title: '版本号', width: 80}
      , {field: 'suspended', title: '是否挂起', width: 90, templet: function(d){
          if(d.suspended === true){
            return '<span style="color: pink">是</span>';
          } else {
            return '<span style="color: blue">否</span>';
          }
        }, unresize: true}
      , {field: 'diagramResourceName', title: '流程图', minWidth: 150}
      , {field: 'tenantId', title: '租户', width: 110, hide: true}
      , {field: 'createTime', title: '创建时间', templet: '<div>{{ layui.util.toDateString(d.createTime, "yyyy-MM-dd HH:mm:ss") }}</div>',  minWidth: 170, sort: true}
      , {title: '操作', width: 160, align: 'center', fixed: 'right', toolbar: '#definition-table'}
    ]
  });

  const definition = {
    // 删除
    handleDelete: function (index, id) {
      //提交 Ajax 成功后，更新表格中的数据
      admin.req({
        url: '/flow/definition/del/' + id
        , type: 'post'
        , done: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-definition-table'); //数据刷新
          layer.close(index); //关闭弹层
        }
      });
    },
    // 挂起
    handleSuspend: function (id) {
      //提交 Ajax 成功后，更新表格中的数据
      admin.req({
        url: '/flow/definition/suspend'
        , type: 'post'
        , data: {"processDefId": id}
        , done: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-definition-table'); //数据刷新
        }
      });
    },
    // 激活
    handleActive: function (id) {
      //提交 Ajax 成功后，更新表格中的数据
      admin.req({
        url: '/flow/definition/active'
        , type: 'post'
        , data: {"processDefId": id}
        , done: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-definition-table'); //数据刷新
        }
      });
    },
    // 启动
    handleStart: function (data) {
      let obj = new Object();
      obj.procDefKey = data.key;
      obj.procDefId = data.id;
      obj.variables = new Map();
      //提交 Ajax 成功后，更新表格中的数据
      admin.req({
        url: '/flow/instance/start'
        , type: 'post'
        , contentType: 'application/json;charset=utf-8'
        , dataType: 'json'
        , data: JSON.stringify(obj)
        , done: function (res) {
          //执行成功
          layer.msg(res.msg, {icon: 1});
          table.reload('LAY-definition-table'); //数据刷新
        }
      });
    },
    // 查看流程图
    handleDiagram: function (id) {
      let windowUrl = window.URL || window.webkitURL;//处理浏览器兼容性
      let xhr = new XMLHttpRequest();
      xhr.open("GET", '/flow/definition/process/diagram?processDefId=' + id, true);
      xhr.responseType = "blob";
      // xhr.setRequestHeader("Authorization", 'Bearer ' + auth.token);
      xhr.onload = function () {
        if (this.status == 200) {
          let blob = this.response;
          let imgUrl = windowUrl.createObjectURL(blob);
          layer.photos({
            photos: {
              "title": "流程定义",
              "start": 0,
              "data": [
                {
                  "alt": "流程定义",
                  "pid": 1,
                  "src": imgUrl
                }
              ]
            },
            close: function() {
              // 关闭图片查看器时释放创建的URL
              URL.revokeObjectURL(imgUrl);
            },
            toolbar: true, // 是否显示顶部工具栏
            footer: true // 是否显示底部栏 --- 2.8.16+
          });
        }
      }
      xhr.send();
    },
    // 下载xml
    handleXml: function (obj) {
      let windowUrl = window.URL || window.webkitURL;//处理浏览器兼容性
      let xhr = new XMLHttpRequest();
      xhr.open("GET", '/flow/definition/process/xml?processDefId=' + obj.id, true);
      xhr.responseType = "blob";
      // xhr.setRequestHeader("Authorization", 'Bearer ' + auth.token);
      xhr.onload = function () {
        if (this.status == 200) {
          let blob = this.response;
          // 创建一个隐藏的 <a> 元素
          let link = document.createElement('a');
          link.style.display = 'none';
          document.body.appendChild(link);

          // 创建一个Blob URL并赋值给<a>元素的href属性
          let url = window.URL.createObjectURL(blob);
          link.href = url;

          // 设置下载的文件名（这里假设你知道文件名或者可以从服务器响应头中获得）
          link.download = obj.resource;
          // 触发点击事件来开始下载
          link.click();
          // 下载完成后释放Blob URL
          window.URL.revokeObjectURL(url);
          // 移除<a>元素
          document.body.removeChild(link);
        }
      }
      xhr.send();
    }
  }

  //对外暴露的接口
  exports('definition', definition);
});